<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>回顾Object.defineProperty方法</title>
</head>

<body>
  <script type="text/javascript">
    let number = 18
    let person = {
      name: '张三',
      sex: '男',
      //age:18
    }
    //用此方法添加的不可枚举（遍历）
    Object.defineProperty(person, 'age', {
      // value: 18,
      // enumerable: true,//可以（枚举）遍历 默认false
      // writable: true,//可以修改 默认false
      // configurable: true//可以删除 默认false

      //get函数，有人读取person属性，get函数被调用，返回的值就是age的值
      get: function () {
        console.log("有人读取person属性");
        return number
      },
      //set函数，有人修改person属性，set函数被调用，且会收到具体值
      set (value) {
        console.log("有人修改person属性,值：" + value);
        number = value
      }
    });
    //遍历无法打印Object.defineProperty添加的属性
    console.log(Object.keys(person))
    //遍历无法打印Object.defineProperty添加的属性
    for (let key in person) {
      console.log('@', person[key]);

    }
    //正常打印
    console.log(person);
  </script>
</body>

</html>